<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>改变Promise实例的状态和指定回调函数谁先谁后？</title>
</head>
<body>
<!--
    改变 Promise 实例的状态和指定回调函数谁先谁后？
        1. 都有可能，正常情况下是先指定回调再改变状态，但也可以先改状态再指定回调。
        2. 如何先改状态再指定回调？
            延迟一会再调用 then()
        3. Promise 实例什么时候才能得到数据？
            如果先指定的回调（放在 Promise 实例的身上 p.list），那当状态发生改变时，回调函数就会推向队列，然后被调用，得到数据
            如果先改变的状态（会存储状态），那当指定回调时，回调函数就会立即被推向队列，然后被调用（回调不会在实例身上存储一份了，存储就太无聊了），得到数据
 -->
<script type="text/javascript">
    // 先指定回调，后改变状态（最常见）
    /*
    const p = new Promise((resolve, reject) => {
        setTimeout(() => {
             resolve('ok')
        }, 2000)
    })
    p.then(
        value => {
            console.log('成功了', value)
        },
        reason => {
            console.log('失败了', reason)
        }
    )

     */

    // 先改变状态，后指定回调
    /*
    const p = new Promise((resolve, reject) => {
        reject('err')
    })
    setTimeout(() => {
        p.then(
            value => {
                console.log('成功了', value)
            },
            reason => {
                console.log('失败了', reason)
            }
        )
    }, 2000)

     */
</script>
</body>
</html>
